<?php
namespace app\job;

use app\common\model\User;
use think\Log;
use think\queue\Job;

/**
 * 分享邀请成功逻辑
 * Class Invite
 * @package app\job
 */
class Invited{

    public function fire(Job $job, $data){

        //....这里执行具体的任务
        // 有些消息在到达消费者时,可能已经不再需要执行了
        $isJobStillNeedToBeDone = $this->checkToBeDone($data);
        if(!$isJobStillNeedToBeDone){
            $job->delete();
            return;
        }

        $isJobDone = $this->doHelloJob($data);

        if ($isJobDone) {
            // 如果任务执行成功， 记得删除任务
            $job->delete();
        }else{
            if ($job->attempts() > 3) {
                //通过这个方法可以检查这个任务已经重试了几次了
                $job->delete();
            }
        }


    }

    public function failed($data){

        // ...任务达到最大重试次数后，失败了
    }

    /**
     * 有些消息在到达消费者时,可能已经不再需要执行了
     * @param array|mixed    $data     发布任务时自定义的数据
     * @return boolean                 任务执行的结果
     */
    private function checkToBeDone($data){
        return true;
    }

    /**
     * 根据消息中的数据进行实际的业务处理...
     */
    private function doHelloJob($data)
    {
        //TODO 后续可增加其他逻辑
        //邀请人和被邀请人增加幸运等级（被邀请人逻辑直接在注册登录时修改）
        if (isset($data['pid']) && $data['pid']){
            $user = User::get($data['pid']);
            if ($user->level < 6){
                $fields['level'] = $user->level + 1;
                $user->save($fields);
                $msg = '用户邀请成功！';
                Log::myLog($msg,$data,'job');
            }
        }


        return true;
    }

}